/*
	Copyright (C) 2013 Pontificia Universidad Catolica del Peru
	contact: http://avatar.inf.pucp.edu.pe/realidad-aumentada/
	address contact: Av. Universitaria 1801, San Miguel, Lima-Peru.
	
	This file is part of UbicAR PUCP.

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with This program.  If not, see <http://www.gnu.org/licenses/>.
*/
/*
	Authors: Alvaro Roger Agüero Sánchez, Rodolfo Javier Galvez Meza
	Pontificia Universidad Catolica del Peru
	Departamento de Ingeniería
*/

package org.grupoavatar.guiaubicua.punto;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.grupoavatar.guiaubicua.R;
import org.grupoavatar.guiaubicua.auxiliares.HiloEnviarResultadosEncuesta;
import org.grupoavatar.guiaubicua.auxiliares.PreguntasEntity;
import org.grupoavatar.guiaubicua.auxiliares.PreguntasExpandableListAdapter;
import org.grupoavatar.guiaubicua.auxiliares.Usuario;
import org.grupoavatar.guiaubicua.mix.data.Encuesta;
import org.grupoavatar.guiaubicua.punto.MasterActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class EncuestaScreen extends MasterActivity {

	//private ArrayList<String> imagenes;
	private Encuesta encuesta;
	private ExpandableListView preguntasView;
	private Button btnEnviarRespuestas;
	//private static EncuestaScreen screen;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.encuesta_screen);
		//screen = this;
		btnUbicacion.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				Intent intent = new Intent(EncuestaScreen.this, TabUbicacion.class);
				pasarDatos();
				startActivity(intent);
				overridePendingTransition(0, 0);
				finish();
				overridePendingTransition(0, 0);
			}
		});

		btnServicios.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				Intent intent = new Intent(EncuestaScreen.this, TabServicios.class);
				pasarDatos();
				startActivity(intent);
				overridePendingTransition(0, 0);
				finish();
				overridePendingTransition(0, 0);
			}
		});
		
		btnGeneral.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				Intent intent = new Intent(EncuestaScreen.this, TabGeneral.class);
				pasarDatos();
				startActivity(intent);
				overridePendingTransition(0, 0);
				finish();
				overridePendingTransition(0, 0);
			}
		});

		//Cabecera
//		TextView lblNombre = (TextView) findViewById(R.id.lblNombre);
//		lblNombre.setText(poi.getTitle());
//		
//		TextView lblCategoria = (TextView) findViewById(R.id.lblCategoria);
//		lblCategoria.setText(MixContext.getDataSourceName(poi.getDatasource()));
//		
//		ImageView imageCate = (ImageView) this.findViewById(R.id.imgCategoria);
//        Bitmap bitfile_cate = ((ArpucpPOIMarker)poi).getDataSourceCircleIconRA(this.getResources());                
//        imageCate.setImageBitmap(bitfile_cate);
		
        if (EncuestaIntroScreen.encuestaActiva) {
			TextView lblMensajeEncuesta = (TextView) findViewById(R.id.txtMensajeEncuesta);
			
			encuesta = EncuestaIntroScreen.getEncuestaActual();
			
			btnEnviarRespuestas = (Button) findViewById(R.id.btnEnviarRespuestas);
			btnEnviarRespuestas.setEnabled(false);
			Button btnCancelarEncuesta = (Button) findViewById(R.id.btnCancelarEncuesta);
			btnCancelarEncuesta.setOnClickListener(new OnClickListener() {

				public void onClick(View v) {
					mostrarIntroEncuesta();
				}
			});
			
	        if (encuesta != null) { //tiene encuesta
				preguntasView = (ExpandableListView) findViewById(R.id.listaPreguntas);
				String mensaje = encuesta.getNombre();
				if (encuesta.getPreguntas().size() != 1)
					mensaje = mensaje + " (" + encuesta.getPreguntas().size() + " preguntas)";
				else
					mensaje = mensaje + " (1 pregunta)";
				
				DisplayMetrics metrics = new DisplayMetrics();
				int width = metrics.widthPixels;
				preguntasView.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(40));
				ArrayList<PreguntasEntity> preguntas = new ArrayList<PreguntasEntity>();
				for (int i = 0; i < encuesta.getPreguntas().size(); i++) {
					preguntas.add(new PreguntasEntity(encuesta.getPreguntas().get(i)));
				}
				PreguntasExpandableListAdapter adapter = new PreguntasExpandableListAdapter(this,
						preguntasView, preguntas);
				preguntasView.setAdapter(adapter);
				
//				preguntasView.setOnChildClickListener(new OnChildClickListener() {
//					
//					@Override
//					public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
//							int childPosition, long id) {
//						// TODO Auto-generated method stub
//						boolean unicaCatSeleccionada = false;
//						
//						//CheckBox cb = (CheckBox) v.findViewById(R.id.cbxListFiltro);
//
//						return unicaCatSeleccionada;
//					}
//				});
				
				lblMensajeEncuesta.setText(mensaje);
				if (encuesta.isValido())
					enableEnviarButton();
				btnEnviarRespuestas.setOnClickListener(new OnClickListener() {

					public void onClick(View v) {
						enviarEncuesta();
						mostrarIntroEncuesta();
					}
				});
	        } else {
	        	lblMensajeEncuesta.setText("No hay encuesta disponible.");
	        	EncuestaIntroScreen.encuestaActiva = false;
	        }
        } else {
        	mostrarIntroEncuesta();
        }
	}
	
	public void mostrarIntroEncuesta() {
		EncuestaIntroScreen.encuestaActiva = false;
		Intent intent = new Intent(EncuestaScreen.this, EncuestaIntroScreen.class);
		pasarDatos();
		startActivity(intent);
		overridePendingTransition(0, 0);
		finish();
		overridePendingTransition(0, 0);
	}
	
	public void enviarEncuesta() {
		encuesta.setRespondido(true);
		new HiloEnviarResultadosEncuesta(this).execute();
		
	}
	
	public static String getIdUsuario() {
		return String.valueOf(Usuario.id_usuario);
	}
	
	public static HttpResponse makeRequest(String uri, String json) {
	    try {
	        HttpPost httpPost = new HttpPost(uri);
	        httpPost.setEntity(new StringEntity(json));
	        httpPost.setHeader("Accept", "application/json");
	        httpPost.setHeader("Content-type", "application/json");
	        return new DefaultHttpClient().execute(httpPost);
	    } catch (UnsupportedEncodingException e) {
	        e.printStackTrace();
	    } catch (ClientProtocolException e) {
	        e.printStackTrace();
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	    return null;
	}
	
	public void enableEnviarButton() {
		if (btnEnviarRespuestas != null)
			btnEnviarRespuestas.setEnabled(true);
	}
	
	public boolean isEnviarButtonEnabled() {
		if (btnEnviarRespuestas != null) {
			return btnEnviarRespuestas.isEnabled();
		} else
			return false;
	}
	
	public int GetDipsFromPixel(float pixels) {
	    // Get the screen's density scale
	    final float scale = getResources().getDisplayMetrics().density;
	    // Convert the dps to pixels, based on density scale
	    return (int) (pixels * scale + 0.5f);
    }
}